const app = getApp()
// pages/goods_list/main.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 导航栏信息
    navBar: {
      // 导航高度
      navHeight: 0,
      // 状态栏高度
      statusBarHeight: 0,
      // 标题栏高度
      titleBarHeight: 0,
      // 胶囊距状态栏的高度
      menuBtnTop: 0
    },
    tabs: [
      { id: 0,value: '综合',isActive: true },
      { id: 1,value: '销量',isActive: false },
      { id: 2,value: '价格',isActive: false }
    ],
    // 商品列表数据
    goodsList: []
  },
  cid: '',
  pagenum: 1,
  // 商品总页数
  totalPages: 1,
  flag: 0,

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setData({
      navBar: {
        navHeight: app.globalData.navBar.navHeight,
        statusBarHeight: app.globalData.navBar.statusBarHeight,
        titleBarHeight: app.globalData.navBar.titleBarHeight,
        menuBtnTop: app.globalData.navBar.menuBtnTop
      }
    })

    this.cid = options.cid
    this.getGoodsList()
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    // 1.判断还有没有下一页数据 
    if(this.totalPages <= this.pagenum) {
      // 没有下一页数据
      wx.showToast({ title: '没有下一页数据' });
    }else {
      // 有下一页数据
      this.pagenum++
      if(this.flag === 0){
        this.getGoodsList()
      }
      if(this.flag === 1) {
        this.getSortSales()
      }
      if(this.flag === 2) {
        this.getSortPrice()
      }
    }
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   * 下拉刷新页面
   */
  onPullDownRefresh: function () {
    // 重置商品数据
    this.setData({
      goodsList: []
    })
    // 重置页码 pagenum
    this.pagenum = 1
    // 重新发送请求商品数据
    if(this.flag === 0){
      this.getGoodsList()
    }
    if(this.flag === 1) {
      this.getSortSales()
    }
    if(this.flag === 2) {
      this.getSortPrice()
    }
  },

  // 标题点击事件，从子组件传递过来
  handleTabsItemChange(e) {
    const { index } = e.detail
    let { tabs } = JSON.parse(JSON.stringify(this.data))
    tabs.map((v, i) => i === index ? v.isActive = true : v.isActive = false)
    this.setData({ tabs })
    this.flag = index
    if(index === 0) {
      // 重置商品数据
      this.setData({
        goodsList: []
      })
      // 重置页码 pagenum
      this.pagenum = 1
      // 重新发送请求商品数据
      this.getGoodsList()
    }
    if(index === 1) {
      this.setData({
        goodsList: []
      })
      this.pagenum = 1
      this.getSortSales()
    }
    if(index === 2) {
      this.setData({
        goodsList: []
      })
      this.pagenum = 1
      this.getSortPrice()
    }
  },

  // 点击返回上一页面
  handleBack() {
    wx.navigateBack({
      delta: 1
    })
  },

  // 获取商品列表数据
  async getGoodsList() {
    // 显示加载中 效果
    wx.showLoading({
      title: '加载中',
      mask: true
    })
    const db = wx.cloud.database()
    // 发送请求响应的数据
    const { data: res } = await db.collection('goods').where({ cid: this.cid }).skip((this.pagenum - 1) * 10).limit(10).get()
    // 记录总条数
    const { total } = await db.collection('goods').where({ cid: this.cid }).count()
    // 计算总页数
    this.totalPages = Math.ceil(total / 10)
    // 上拉加载下一页数据，拼接返回的数组数据
    this.setData({
      goodsList: [...this.data.goodsList, ...res]
    })
    // 关闭下拉刷新等待效果
    wx.stopPullDownRefresh()
    // 关闭加载中效果
    wx.hideLoading()
  },

  // 价格排序
  async getSortPrice() {
    // 显示加载中 效果
    wx.showLoading({
      title: '加载中',
      mask: true
    })
    const db = wx.cloud.database()
    const { data: res} = await db.collection('goods').where({ cid: this.cid }).orderBy('good_price', 'asc').skip((this.pagenum - 1) * 10).limit(10).get()
    this.setData({
      goodsList: [...this.data.goodsList, ...res]
    })
    // 关闭下拉刷新等待效果
    wx.stopPullDownRefresh()
    // 关闭加载中效果
    wx.hideLoading()
  },

  // 销量排序
  async getSortSales() {
    // 显示加载中 效果
    wx.showLoading({
      title: '加载中',
      mask: true
    })
    const db = wx.cloud.database()
    const { data: res} = await db.collection('goods').where({ cid: this.cid }).orderBy('good_sale', 'desc').skip((this.pagenum - 1) * 10).limit(10).get()
    this.setData({
      goodsList: [...this.data.goodsList, ...res]
    })
    // 关闭下拉刷新等待效果
    wx.stopPullDownRefresh()
    // 关闭加载中效果
    wx.hideLoading()
  }
})